package com.qs.rest;

import java.util.List;

import javax.ws.rs.FormParam;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.HttpHeaders;
import javax.ws.rs.core.MediaType;

import com.qs.utils.HttpStatusCodes;
import com.qs.utils.HttpStatusStrings;
import com.qs.valuesobjects.containers.FeedContainerVo;
import com.qs.valuesobjects.containers.BaseContainerVo;
import com.qs.valuesobjects.containers.SessionContainerVo;
import com.qs.valuesobjects.containers.UserContainerVo;
import com.wordnik.swagger.annotations.Api;
import com.wordnik.swagger.annotations.ApiOperation;
import com.wordnik.swagger.annotations.ApiParam;
import com.wordnik.swagger.annotations.ApiResponse;
import com.wordnik.swagger.annotations.ApiResponses;



@Api(value = "rest/services/private", description = "Private Operations")
public interface IPrivateRestService {
	

	
	@POST
	@Path( "/users/register" )
	@Produces( MediaType.APPLICATION_JSON )
	@ApiOperation(value = "Register User",response=UserContainerVo.class)
	@ApiResponses(value = 
					{ 	@ApiResponse(code = HttpStatusCodes.OK, message = HttpStatusStrings.OK),
						@ApiResponse(code = HttpStatusCodes.INVALID_REQUEST, message = HttpStatusStrings.INVALID_REQUEST),
						@ApiResponse(code = HttpStatusCodes.INTERNAL_SERVER_ERROR, message = HttpStatusStrings.INTERNAL_SERVER_ERROR),
					})
	public BaseContainerVo register(
								@ApiParam(value="First Name",required=true) @FormParam( "firstName" ) 		String firstName,
								@ApiParam(value="Last Name",required=true) @FormParam( "lastName" ) 		String lastName,
								@ApiParam(value="Screen Name",required=true) @FormParam( "screenName" ) 	String screenName,
								@ApiParam(value="Email",required=true) @FormParam( "email" ) 				String email,
								@ApiParam(value="Password",required=true) @FormParam( "password" ) 			String password,
								@ApiParam(value="Address",required=false) @FormParam( "address" ) 			String address,
								@ApiParam(value="Phone") @FormParam( "phone" ) 								String phone,
								@ApiParam(value="ChannelId",required=true) @FormParam( "channelId" ) 		List<String> channelIds);
	
	@POST
	@Path( "/users/login" )
	@Produces( MediaType.APPLICATION_JSON )
	@ApiOperation(value = "Login User", response = SessionContainerVo.class)
	public BaseContainerVo login(
							@ApiParam(value="Email",required=true) @FormParam( "email" ) 	String email,
							@ApiParam(value="Password",required=true) @FormParam( "password" )String password );
	
	@POST
	@Path( "/users/logout" )
	@Produces( MediaType.APPLICATION_JSON )
	@ApiOperation(value = "Logout User", response = SessionContainerVo.class)
	public BaseContainerVo logout();
	
	@POST
	@Path("/users/feeds")
	@Produces( MediaType.APPLICATION_JSON )
	@ApiOperation(value = "Create Feed", response = FeedContainerVo.class)
	public BaseContainerVo createFeed(
									@FormParam("channelId")	String channelId,
									@FormParam("text") 		String text);
	
	
}
